<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>

<meta name="copyright" content="Copyright (c) Thales Corporate Services S.A.S, 2009. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<meta name="author" content="Benoit Langlois" >
<meta name="keywords" content="factory component"/>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
<title>Factory Component</title>
</HEAD>
<BODY BGCOLOR="#ffffff">

<table border="0" cellpadding="2" cellspacing="0" width="100%">
  <tbody>
    <tr>
    	<td colspan="2" align="left" bgcolor="#0080c0" valign="top">
    	  <h2><font face="Arial,Helvetica"><font color="#ffffff">
    	  &nbsp;Factory Component
    	  </font></font></h2>
    	</td>
    </tr>
	</tbody>
</table>


<a name="definition"><h2>Definition</h2></a>
<p class="Para">A Factory Component is a deployable software generation unit aiming at producing assets from inputs assets.</p>
  
  
<a name="motivation"><h2>Motivation</h2></a>
<p class="Para">A factory component is a component with a set of contracts as the factory component parameters, a set of viewpoints and a generation orchestration.</p>
<p class="Para">The purpose of factory components is to achieve simple to complex, small- to large-scale, and heterogeneous generations. Unlike to generators with a defined technical scope of generation (e.g., text or model transformation), a factory component can mix several generation techniques, produce complex assets, such as languages, framework or tools, and cover the complete production lifecycle of assets. An heterogeneous generation can be realized individually by a factory component or collectivelly by a set of factory components with a generation chain.</p>
<p class="Para">A factory component cannot assume alone complex generations. For this reason, it delegates them to other factory components by assembly. Every factory component has a generation objective and realizes the generation it is specialized for.</p>
<p class="Para">Regarding the process engineering, a factory component is an activity and contributes in the context of a work definition (cf. <a href="http://www.omg.org/spec/SPEM/2.0/">SPEM</a>, e.g. with the notion of process, phase, iteration, activity). The intent is to progressively replace manual development tasks by automated tasks. Then, a factory component is not only a technique but becomes, when intensively used, a vector for common generation practices. Next, it becomes to structure the software practice and the communication language between project team members. Over the time, the stake is to develop sharable factory component portfolios, i.e. homogeneous groups of generation topics extensible by mutual team enrichment.</p>

<p align="center">
  <img src="./images/factoryComponentGlobalView.jpg" alt="GLobal view of a Factory Component"/>
</p>
<p align="center">
  <i>Figure 1. GLobal view of a Factory Component</i>
</p>


<a name="structure"><h2>Structure</h2></a>
<p class="Para">A factory component consists of:</p>
<ul CLASS="UnorderedList">
    <li CLASS="Item">A set of <i>contracts</i>, for the declaration of the required parameters of the generation,</li>
    <li CLASS="Item">A set of <i>viewpoints</i> for the declaration of the generation data organized by concerns,</li>
    <li CLASS="Item">A generation <i>orchestration</i>.</li>
</ul>

<p class="Para">Beyond this structure, a factory component is generally specialized in function of its contents. Some factory components just contain viewpoint information (e.g., domain models, model-to-model mapping), others conduct the generation, or some are a conglomerate of viewpoints and orchestration. A factory component is hyper-specialized when it contains only one information type, such as generation patterns on a generation topic.</p>


<a name="relationAndType"><h2>Relationships between factory components and factory component types</h2></a>
<p class="Para">Two kinds of logical relationships exist between factory components.</p>
<p class="Para">
  <i>Delegation relationship</i>. A factory component delegates its work to another one. This implies that every used factory component has an identified generation role. The following figure presents a tool infrastructure factory component that delegates its generation to factory components for model management, model check, transformation and presentation with user interfaces. The model management API generation delegates its generation to two factory components, one for code generation (e.g., Java code) and another one for documentation (e.g., Java Doc.).
</p>
<p class="Para">
  <i>Resource provider relationship</i>. In this case, a factory component has one or several viewpoints which provide generation information. For instance, a factory component contains generation patterns in a generation viewpoint (e.g., a web site generation).  
</p>

<p align="center">
  <img src="./images/factoryComponentAssembly.gif" alt="Assembly of a Factory Component"/>
</p>
<p align="center">
  <i>Figure 2. Assembly of Factory Component</i>
</p>

<p class="Para">Finally, there are four types of factory components:</p>
<ul CLASS="UnorderedList">
    <li CLASS="Item"><i>Productive factory component</i>: this kind of factory component is able to produce assets by itself,</li>
    <li CLASS="Item"><i>Assembly factory component</i>: this kind of factory component delegates its generation to specialized factory components (i.e., productive or assembly factory components),</li>
    <li CLASS="Item"><i>Resource provider factory component</i>: this kind of factory provides generation data, such as generation patterns or license policy,</li>
    <li CLASS="Item"><i>Conglomerate factory component</i>: this kind of factory cumulates one or several of the previous factory component roles (i.e., productive, assembly, resource provider).</li>
</ul>


<a name="lifecycle"><h2>Factory Component Lifecycle</h2></a>
<p class="Para">A factory component can adopt three kinds of stage during its lifecycle: development, execution and exchange. The <i>development</i>, or edition, consists in defining and populating the factory component contents. The <i>execution</i> is the stage when a factory component is activated and produces the expected assets.</p>

<p align="center">
  <img src="./images/factoryComponentLifecycle.jpg" alt="Factory Component Lifecycle"/>
</p>
<p align="center">
  <i>Figure 3. Factory Component Lifecycle</i>
</p>

<p class="Para">
<i>Exchange</i> is the last state. A factory component exchange consists in publishing (i.e., exporting) and harvesting (i.e., importing) factory components between teams and team members. The team that reuses off-the-shelf factory components integrate them in its generation chain, or specialize them.
</p>

<p>Development / execution / exchange is a first level of lifecycle. At the process level, there are complementary and inter-related lifecycles. There are in-the-small lifecycles, at the developer or team level, and in-the-large lifecycles at the company or community level where more and more complex factory component portfolio are developed and shared.</p>

</body>
</html>
